This page last changed on Jan 27, 2008 by carlos.gonzalez.

Se puede construir un analizador predictivo no recursivo explícitamente manteniendo una pila, en lugar de hacerlo implícitamente mediante llamadas recursivas. El problema durante el análisis predictivo esta en determinar la producción que debe aplicarse a un no terminal. El analizador sintáctico no recursivo busca la producción que debe aplicarse en una tabla.

El buffer de entrada contiene la cadena que se va a analizar seguida de $ (un símbolo utilizado para indicar el fin de la cadena). La pila contiene una secuencia de símbolos gramaticales con el símbolo $ en la parte de abajo, que indica la base de la pila. Al principio la pila contiene solo el símbolo inicial de la gramática encima del símbolo $. La tabla de análisis es una matriz bidimensional M[A,a], donde A es un no terminal y a es un terminal o el símbolo $

El programa toma en cuenta el símbolo en el tope de la pila (X) y el símbolo actual de la entrada (a), estos símbolos determinan las posibles acciones del analizador. Existen tres posibilidades:

  1. Si X=a=$, el analizador se detiene y avisa el éxito del análisis.
  2. Si X=a!=$, el analizador saca de X de la pila y mueve el apuntador de entrada al
    siguiente símbolo.
  3. Si X es no terminal, el programa consulta la entrada en M[X,a], esta entrada es una producción para X o una entrada de error. Si por ejemplo M[X,a]=X --> UVW, el analizador sustituye X del tope de la pila por WVU. Si M[X,a]=error, el analizador
    llama a la rutina de recuperación de error.

Ejemplo

Dada la gramática con producciones:
E --> TE'
E' --> +TE' | ε
F --> (E) | id
la cadena w=id+id*id y la tabla de análisis

El algoritmo tendría el siguiente comportamiento


APNR.GIF (image/gif)
salidaEjemplo.GIF (image/gif)
tablaLAEjemplo.GIF (image/gif)
Document generated by Confluence on Oct 04, 2010 11:24